# 导包
from api.staff import StaffAPI
from api.login import LoginAPI
from common.dbutil import DBUtil
from common.assertutil import common_assert
import config


# 创建测试类
class TestStaffAPI:
    # 初始化
    token = None
    id666 = None

    # 一条测试用例就是一个测试方法
    # 当前代码只是实现了添加员工的冒烟测试用例
    # 当前代码存在两个需要优化点：
    # （1）token数据没有动态获取 ==》关联
          # 1、发送登录成功请求
          # 2、获取登录成功之后的data数据
          # 3、保存获取的data数据 到 测试类自定义属性中
              # TestStaffAPI.token = response.json().get("data")
    # (2) 已经使用过的手机号不能再次被使用，每次测试时都需要手动修改手机号
          # 思路：执行delete语句删除已经存在的手机号即可
          # 步骤：
            # 1、导入数据库操作类dbutil
            # 2、执行delete语句   DBUtils().exe_sql("delete from bs_user where mobile='18906013001';")

    # 前置处理：登录成功 + 清理测试数据
    def setup_class(self):
        # 登陆成功
        response = LoginAPI().login(config.LOGIN_DATA)
        # print(response.json())
        # 提取要传递给员工管理接口的数据并保存至类的属性中
        TestStaffAPI.token = response.json().get("data")

        # 清理测试数据
        print(DBUtil().exe_sql("delete from bs_user where mobile='18906013001';"))

    # 添加员工成功
    def test01_insert_staff(self):
        insert_data = {
            "username": "jack886622",
            "mobile": "18906013001",
            "workNumber": "jack15906012001"
        }
        response = StaffAPI().insert_staff(insert_data=insert_data, token=TestStaffAPI.token)
        print(response.json())

        # 断言
        # assert response.status_code == 200
        # assert response.json().get("success") is True
        # assert response.json().get("code") == 10000
        # assert "成功" in response.json().get("message")
        # common_assert(response, 200, True, 10000, "成功")
        common_assert(response)

        # 管理（提取员工ID并保存类属性）
        TestStaffAPI.id666 = response.json().get("data").get("id")
        print(TestStaffAPI.id666)

    def test02_select_staff(self):
        response = StaffAPI().select_staff(staff_id=TestStaffAPI.id666, token=TestStaffAPI.token)

        # 断言
        # assert response.status_code == 200
        # assert response.json().get("success") is True
        # assert response.json().get("code") == 10000
        # assert "成功" in response.json().get("message")
        # common_assert(response, 200, True, 10000, "成功")
        common_assert(response)

    def test03_update_staff(self):
        response = StaffAPI().update_staff(staff_id=TestStaffAPI.id666, token=TestStaffAPI.token, update_data={"username": "rose666"})
        print(response.json())

        # 断言
        # assert response.status_code == 200
        # assert response.json().get("success") is True
        # assert response.json().get("code") == 10000
        # assert "成功" in response.json().get("message")
        # common_assert(response, 200, True, 10000, "成功")
        common_assert(response)

    def test04_delete_staff(self):
        # 调用删除接口前：连接数据库，查询删除标识is_delete的值（0：未删除、1：已删除）
        print(DBUtil().exe_sql("select is_delete from bs_user where mobile='18906013001';"))

        # 调用删除接口、完成数据的删除操作
        response = StaffAPI().delete_staff(staff_id=TestStaffAPI.id666, token=TestStaffAPI.token)
        print(response.json())

        # 断言
        # assert response.status_code == 200
        # assert response.json().get("success") is True
        # assert response.json().get("code") == 10000
        # assert "成功" in response.json().get("message")
        # common_assert(response, 200, True, 10000, "成功")
        common_assert(response)

        # 调用删除接口后：连接数据库，查询删除标识is_delete的值（0：未删除、1：已删除）
        print(DBUtil().exe_sql("select is_delete from bs_user where mobile='18906013001';"))
